package com.buddy.learn.algorithm.demo;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Buddy
 * @date 2021/5/6
 */
public class _019简单错误记录 {
    /**
     * 开发一个简单错误记录功能小模块，能够记录出错的代码所在的文件名称和行号。
     * 处理：
     * 1、 记录最多8条错误记录，循环记录，最后只用输出最后出现的八条错误记录。
     * 对相同的错误记录只记录一条，但是错误计数增加。
     * 最后一个斜杠后面的带后缀名的部分（保留最后16位）和行号完全匹配的记录才做算是”相同“的错误记录。
     * 2、 超过16个字符的文件名称，只记录文件的最后有效16个字符；
     * 3、 输入的文件可能带路径，记录文件名称不能带路径。
     * 4、循环记录时，只以第一次出现的顺序为准，后面重复的不会更新它的出现时间，仍以第一次为准
     */

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("D:\\zwtymj\\xccb\\ljj\\cqzlyaszjvlsjmkwoqijggmybr 645");
        list.add("E:\\je\\rzuwnjvnuz 633");
        list.add("C:\\km\\tgjwpb\\gy\\atl 637");
        list.add("F:\\weioj\\hadd\\connsh\\rwyfvzsopsuiqjnr 647");
        list.add("E:\\ns\\mfwj\\wqkoki\\eez 648");
        list.add("D:\\cfmwafhhgeyawnool 649");
        list.add("E:\\czt\\opwip\\osnll\\c 637");
        list.add("G:\\nt\\f 633");
        list.add("F:\\fop\\ywzqaop 631");
        list.add("F:\\yay\\jc\\ywzqaop 631");
        Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
        for (String str : list) {
            // 按照空格分隔
            String[] ss = str.split("\\s+");
            String fileName = ss[0].substring(ss[0].lastIndexOf("\\") + 1);
            // 如果文件长度大于16
            fileName = fileName.substring(Math.max(fileName.length() - 16, 0)) + " " + ss[1];
            Integer tmp = linkedHashMap.getOrDefault(fileName, 0);
            linkedHashMap.put(fileName, tmp + 1);
        }
        int cnt = 0;
        for (Map.Entry<String, Integer> it : linkedHashMap.entrySet()) {
            if (linkedHashMap.size() - cnt <= 8) {
                System.out.println(it.getKey() + " " + it.getValue());
            }
            cnt++;
        }
    }
}
